60806040526103786009556040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250600c9081620000509190620004a3565b506005600f55600260105560016011557376de9a54044784f535056c3c593b470465ff2d32601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001601260146101000a81548160ff021916908315150217905550348015620000dd57600080fd5b50604051620053d6380380620053d68339818101604052810190620001039190620006ee565b81818160009081620001169190620004a3565b508060019081620001289190620004a3565b5050506200014b6200013f6200015b60201b60201c565b6200016360201b60201c565b6001600781905550505062000773565b600033905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620002ab57607f821691505b602082108103620002c157620002c062000263565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026200032b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620002ec565b620003378683620002ec565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620003846200037e62000378846200034f565b62000359565b6200034f565b9050919050565b6000819050919050565b620003a08362000363565b620003b8620003af826200038b565b848454620002f9565b825550505050565b600090565b620003cf620003c0565b620003dc81848462000395565b505050565b5b818110156200040457620003f8600082620003c5565b600181019050620003e2565b5050565b601f82111562000453576200041d81620002c7565b6200042884620002dc565b8101602085101562000438578190505b620004506200044785620002dc565b830182620003e1565b50505b505050565b600082821c905092915050565b6000620004786000198460080262000458565b1980831691505092915050565b600062000493838362000465565b9150826002028217905092915050565b620004ae8262000229565b67ffffffffffffffff811115620004ca57620004c962000234565b5b620004d6825462000292565b620004e382828562000408565b600060209050601f8311600181146200051b576000841562000506578287015190505b62000512858262000485565b86555062000582565b601f1984166200052b86620002c7565b60005b8281101562000555578489015182556001820191506020850194506020810190506200052e565b8683101562000575578489015162000571601f89168262000465565b8355505b6001600288020188555050505b505050505050565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b620005c482620005a8565b810181811067ffffffffffffffff82111715620005e657620005e562000234565b5b80604052505050565b6000620005fb6200058a565b9050620006098282620005b9565b919050565b600067ffffffffffffffff8211156200062c576200062b62000234565b5b6200063782620005a8565b9050602081019050919050565b60005b838110156200066457808201518184015260208101905062000647565b60008484015250505050565b60006200068762000681846200060e565b620005ef565b905082815260208101848484011115620006a657620006a5620005a3565b5b620006b384828562000644565b509392505050565b600082601f830112620006d357620006d26200059e565b5b8151620006e584826020860162000670565b91505092915050565b6000806040838503121562000708576200070762000594565b5b600083015167ffffffffffffffff81111562000729576200072862000599565b5b6200073785828601620006bb565b925050602083015167ffffffffffffffff8111156200075b576200075a62000599565b5b6200076985828601620006bb565b9150509250929050565b614c5380620007836000396000f3fe6080604052600436106101f95760003560e01c806370a082311161010d578063bd611cf0116100a0578063e985e9c51161006f578063e985e9c5146106ec578063ef2fb0fc14610729578063f2fde38b14610752578063f839e9df1461077b578063fe30bfd1146107a4576101f9565b8063bd611cf014610630578063c4e41b2214610659578063c668286214610684578063c87b56dd146106af576101f9565b8063a22cb465116100dc578063a22cb46514610597578063a5717d62146105c0578063b88d4fde146105eb578063b8ae548e14610614576101f9565b806370a08231146104ed578063715018a61461052a5780638da5cb5b1461054157806395d89b411461056c576101f9565b80633ccfd60b11610190578063544432fb1161015f578063544432fb1461040857806355f804b3146104335780636138889b1461045c5780636352211e146104855780636c0360eb146104c2576101f9565b80633ccfd60b146103745780633eaaf86b1461038b57806342842e0e146103b657806342966c68146103df576101f9565b8063095ea7b3116101cc578063095ea7b3146102cc57806322f4596f146102f557806323b872dd146103205780633013ce2914610349576101f9565b806301ffc9a7146101fe57806302329a291461023b57806306fdde0314610264578063081812fc1461028f575b600080fd5b34801561020a57600080fd5b5061022560048036038101906102209190612fb2565b6107cd565b6040516102329190612ffa565b60405180910390f35b34801561024757600080fd5b50610262600480360381019061025d9190613041565b6108af565b005b34801561027057600080fd5b506102796108d4565b60405161028691906130fe565b60405180910390f35b34801561029b57600080fd5b506102b660048036038101906102b19190613156565b610966565b6040516102c391906131c4565b60405180910390f35b3480156102d857600080fd5b506102f360048036038101906102ee919061320b565b6109ac565b005b34801561030157600080fd5b5061030a610ac3565b604051610317919061325a565b60405180910390f35b34801561032c57600080fd5b5061034760048036038101906103429190613275565b610ac9565b005b34801561035557600080fd5b5061035e610b29565b60405161036b91906131c4565b60405180910390f35b34801561038057600080fd5b50610389610b4f565b005b34801561039757600080fd5b506103a0610d1a565b6040516103ad919061325a565b60405180910390f35b3480156103c257600080fd5b506103dd60048036038101906103d89190613275565b610d20565b005b3480156103eb57600080fd5b5061040660048036038101906104019190613156565b610d40565b005b34801561041457600080fd5b5061041d610e06565b60405161042a919061325a565b60405180910390f35b34801561043f57600080fd5b5061045a600480360381019061045591906133fd565b610e0c565b005b34801561046857600080fd5b50610483600480360381019061047e919061350e565b610e27565b005b34801561049157600080fd5b506104ac60048036038101906104a79190613156565b610fa9565b6040516104b991906131c4565b60405180910390f35b3480156104ce57600080fd5b506104d761102f565b6040516104e491906130fe565b60405180910390f35b3480156104f957600080fd5b50610514600480360381019061050f9190613557565b6110bd565b604051610521919061325a565b60405180910390f35b34801561053657600080fd5b5061053f611174565b005b34801561054d57600080fd5b50610556611188565b60405161056391906131c4565b60405180910390f35b34801561057857600080fd5b506105816111b2565b60405161058e91906130fe565b60405180910390f35b3480156105a357600080fd5b506105be60048036038101906105b99190613584565b611244565b005b3480156105cc57600080fd5b506105d561125a565b6040516105e2919061325a565b60405180910390f35b3480156105f757600080fd5b50610612600480360381019061060d9190613665565b611260565b005b61062e60048036038101906106299190613156565b6112c2565b005b34801561063c57600080fd5b5061065760048036038101906106529190613156565b611574565b005b34801561066557600080fd5b5061066e611586565b60405161067b919061325a565b60405180910390f35b34801561069057600080fd5b50610699611590565b6040516106a691906130fe565b60405180910390f35b3480156106bb57600080fd5b506106d660048036038101906106d19190613156565b61161e565b6040516106e391906130fe565b60405180910390f35b3480156106f857600080fd5b50610713600480360381019061070e91906136e8565b6116cb565b6040516107209190612ffa565b60405180910390f35b34801561073557600080fd5b50610750600480360381019061074b9190613728565b61175f565b005b34801561075e57600080fd5b5061077960048036038101906107749190613557565b6118cd565b005b34801561078757600080fd5b506107a2600480360381019061079d9190613156565b611950565b005b3480156107b057600080fd5b506107cb60048036038101906107c69190613156565b611c88565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061089857507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806108a857506108a782611c9a565b5b9050919050565b6108b7611d04565b80601260146101000a81548160ff02191690831515021790555050565b6060600080546108e390613797565b80601f016020809104026020016040519081016040528092919081815260200182805461090f90613797565b801561095c5780601f106109315761010080835404028352916020019161095c565b820191906000526020600020905b81548152906001019060200180831161093f57829003601f168201915b5050505050905090565b600061097182611d82565b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006109b782610fa9565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610a27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a1e9061383a565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610a46611dcd565b73ffffffffffffffffffffffffffffffffffffffff161480610a755750610a7481610a6f611dcd565b6116cb565b5b610ab4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aab906138cc565b60405180910390fd5b610abe8383611dd5565b505050565b60095481565b610ada610ad4611dcd565b82611e8e565b610b19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b109061395e565b60405180910390fd5b610b24838383611f23565b505050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610b57611d04565b610b5f61221c565b60004790506000601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610bc191906131c4565b602060405180830381865afa158015610bde573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c029190613993565b90506000821115610c5c57610c15611188565b73ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050158015610c5a573d6000803e3d6000fd5b505b6000811115610d0e57601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb610cab611188565b836040518363ffffffff1660e01b8152600401610cc99291906139c0565b6020604051808303816000875af1158015610ce8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d0c91906139fe565b505b5050610d1861226b565b565b60085481565b610d3b83838360405180602001604052806000815250611260565b505050565b3373ffffffffffffffffffffffffffffffffffffffff16610d6082610fa9565b73ffffffffffffffffffffffffffffffffffffffff1614610db6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dad90613a9d565b60405180910390fd5b60086000815480929190610dc990613aec565b91905055506000600b600083815260200190815260200160002060006101000a81548160ff021916908315150217905550610e0381612275565b50565b600f5481565b610e14611d04565b80600d9081610e239190613cc1565b5050565b610e2f611d04565b6000815111610e73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6a90613ddf565b60405180910390fd5b6000600854600954610e859190613dff565b90508082511115610ecb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec290613e7f565b60405180910390fd5b6000610ed56123c3565b600060115490505b835182108015610eef57506009548111155b15610fa357600b600082815260200190815260200160002060009054906101000a900460ff16610f905760086000815480929190610f2c90613e9f565b91905055506001600b600083815260200190815260200160002060006101000a81548160ff021916908315150217905550610f81848381518110610f7357610f72613ee7565b5b60200260200101518261241b565b8180610f8c90613e9f565b9250505b8080610f9b90613e9f565b915050610edd565b50505050565b600080610fb583612439565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611026576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101d90613f62565b60405180910390fd5b80915050919050565b600d805461103c90613797565b80601f016020809104026020016040519081016040528092919081815260200182805461106890613797565b80156110b55780601f1061108a576101008083540402835291602001916110b5565b820191906000526020600020905b81548152906001019060200180831161109857829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361112d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112490613ff4565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61117c611d04565b6111866000612476565b565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600180546111c190613797565b80601f01602080910402602001604051908101604052809291908181526020018280546111ed90613797565b801561123a5780601f1061120f5761010080835404028352916020019161123a565b820191906000526020600020905b81548152906001019060200180831161121d57829003601f168201915b5050505050905090565b61125661124f611dcd565b838361253c565b5050565b60105481565b61127161126b611dcd565b83611e8e565b6112b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a79061395e565b60405180910390fd5b6112bc848484846126a8565b50505050565b601260149054906101000a900460ff1615611312576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130990614060565b60405180910390fd5b80600f546113209190614080565b341015611362576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113599061410e565b60405180910390fd5b600a8111156113a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139d906141a0565b60405180910390fd5b60095460085411156113ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113e49061420c565b60405180910390fd5b6113f56123c3565b6000601154905060005b828110801561141057506009548211155b156114aa57600b600083815260200190815260200160002060009054906101000a900460ff16611497576001600b600084815260200190815260200160002060006101000a81548160ff021916908315150217905550611470338361241b565b808061147b90613e9f565b9150506008600081548092919061149190613e9f565b91905055505b81806114a290613e9f565b9250506113ff565b80600f546114b89190614080565b34111561151f573373ffffffffffffffffffffffffffffffffffffffff166108fc82600f546114e79190614080565b346114f29190613dff565b9081150290604051600060405180830381858888f1935050505015801561151d573d6000803e3d6000fd5b505b80600f5461152d9190614080565b34101561156f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115669061429e565b60405180910390fd5b505050565b61157c611d04565b80600f8190555050565b6000600854905090565b600c805461159d90613797565b80601f01602080910402602001604051908101604052809291908181526020018280546115c990613797565b80156116165780601f106115eb57610100808354040283529160200191611616565b820191906000526020600020905b8154815290600101906020018083116115f957829003601f168201915b505050505081565b606061162982612704565b611668576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165f90614330565b60405180910390fd5b6000611672612745565b9050600081510361169557604051806020016040528060008152509150506116c6565b8061169f846127d7565b600c6040516020016116b39392919061440f565b6040516020818303038152906040529150505b919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611767611d04565b6009548211156117ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117a39061448c565b60405180910390fd5b6009548111156117f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e8906144f8565b60405180910390fd5b80821115611834576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182b9061458a565b60405180910390fd5b60008290505b8181116118c857600b600082815260200190815260200160002060009054906101000a900460ff166118b5576008600081548092919061187990613e9f565b91905055506001600b600083815260200190815260200160002060006101000a81548160ff0219169083151502179055506118b4338261241b565b5b80806118c090613e9f565b91505061183a565b505050565b6118d5611d04565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611944576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193b9061461c565b60405180910390fd5b61194d81612476565b50565b601260149054906101000a900460ff16156119a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199790614060565b60405180910390fd5b806010546119ae9190614080565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b8152600401611a0991906131c4565b602060405180830381865afa158015611a26573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a4a9190613993565b1015611a8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a829061410e565b60405180910390fd5b6003811115611acf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac6906146ae565b60405180910390fd5b611ad76123c3565b6000601154905060005b8281108015611af257506009548211155b15611b8c57600b600083815260200190815260200160002060009054906101000a900460ff16611b79576001600b600084815260200190815260200160002060006101000a81548160ff021916908315150217905550611b52338361241b565b8080611b5d90613e9f565b91505060086000815480929190611b7390613e9f565b91905055505b8180611b8490613e9f565b925050611ae1565b6009546008541115611bd3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bca9061420c565b60405180910390fd5b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd333084601054611c219190614080565b6040518463ffffffff1660e01b8152600401611c3f939291906146ce565b6020604051808303816000875af1158015611c5e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c8291906139fe565b50505050565b611c90611d04565b8060108190555050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b611d0c611dcd565b73ffffffffffffffffffffffffffffffffffffffff16611d2a611188565b73ffffffffffffffffffffffffffffffffffffffff1614611d80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d7790614751565b60405180910390fd5b565b611d8b81612704565b611dca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dc190613f62565b60405180910390fd5b50565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611e4883610fa9565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600080611e9a83610fa9565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611edc5750611edb81856116cb565b5b80611f1a57508373ffffffffffffffffffffffffffffffffffffffff16611f0284610966565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611f4382610fa9565b73ffffffffffffffffffffffffffffffffffffffff1614611f99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f90906147e3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612008576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fff90614875565b60405180910390fd5b61201583838360016128a5565b8273ffffffffffffffffffffffffffffffffffffffff1661203582610fa9565b73ffffffffffffffffffffffffffffffffffffffff161461208b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612082906147e3565b60405180910390fd5b6004600082815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461221783838360016129cb565b505050565b600260075403612261576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612258906148e1565b60405180910390fd5b6002600781905550565b6001600781905550565b600061228082610fa9565b90506122908160008460016128a5565b61229982610fa9565b90506004600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055506002600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46123bf8160008460016129cb565b5050565b5b600b6000601154815260200190815260200160002060009054906101000a900460ff1680156123f7575060095460115411155b15612419576011600081548092919061240f90613e9f565b91905055506123c4565b565b6124358282604051806020016040528060008152506129d1565b5050565b60006002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036125aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125a19061494d565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161269b9190612ffa565b60405180910390a3505050565b6126b3848484611f23565b6126bf84848484612a2c565b6126fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126f5906149df565b60405180910390fd5b50505050565b60008073ffffffffffffffffffffffffffffffffffffffff1661272683612439565b73ffffffffffffffffffffffffffffffffffffffff1614159050919050565b6060600d805461275490613797565b80601f016020809104026020016040519081016040528092919081815260200182805461278090613797565b80156127cd5780601f106127a2576101008083540402835291602001916127cd565b820191906000526020600020905b8154815290600101906020018083116127b057829003601f168201915b5050505050905090565b6060600060016127e684612bb3565b01905060008167ffffffffffffffff811115612805576128046132d2565b5b6040519080825280601f01601f1916602001820160405280156128375781602001600182028036833780820191505090505b509050600082602001820190505b60011561289a578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a858161288e5761288d6149ff565b5b04945060008503612845575b819350505050919050565b60018111156129c557600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16146129395780600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546129319190613dff565b925050819055505b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146129c45780600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546129bc9190614a2e565b925050819055505b5b50505050565b50505050565b6129db8383612d06565b6129e86000848484612a2c565b612a27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a1e906149df565b60405180910390fd5b505050565b6000612a4d8473ffffffffffffffffffffffffffffffffffffffff16612f23565b15612ba6578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612a76611dcd565b8786866040518563ffffffff1660e01b8152600401612a989493929190614ab7565b6020604051808303816000875af1925050508015612ad457506040513d601f19601f82011682018060405250810190612ad19190614b18565b60015b612b56573d8060008114612b04576040519150601f19603f3d011682016040523d82523d6000602084013e612b09565b606091505b506000815103612b4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b45906149df565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612bab565b600190505b949350505050565b600080600090507a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310612c11577a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008381612c0757612c066149ff565b5b0492506040810190505b6d04ee2d6d415b85acef81000000008310612c4e576d04ee2d6d415b85acef81000000008381612c4457612c436149ff565b5b0492506020810190505b662386f26fc100008310612c7d57662386f26fc100008381612c7357612c726149ff565b5b0492506010810190505b6305f5e1008310612ca6576305f5e1008381612c9c57612c9b6149ff565b5b0492506008810190505b6127108310612ccb576127108381612cc157612cc06149ff565b5b0492506004810190505b60648310612cee5760648381612ce457612ce36149ff565b5b0492506002810190505b600a8310612cfd576001810190505b80915050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612d75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d6c90614b91565b60405180910390fd5b612d7e81612704565b15612dbe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612db590614bfd565b60405180910390fd5b612dcc6000838360016128a5565b612dd581612704565b15612e15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e0c90614bfd565b60405180910390fd5b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612f1f6000838360016129cb565b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612f8f81612f5a565b8114612f9a57600080fd5b50565b600081359050612fac81612f86565b92915050565b600060208284031215612fc857612fc7612f50565b5b6000612fd684828501612f9d565b91505092915050565b60008115159050919050565b612ff481612fdf565b82525050565b600060208201905061300f6000830184612feb565b92915050565b61301e81612fdf565b811461302957600080fd5b50565b60008135905061303b81613015565b92915050565b60006020828403121561305757613056612f50565b5b60006130658482850161302c565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156130a857808201518184015260208101905061308d565b60008484015250505050565b6000601f19601f8301169050919050565b60006130d08261306e565b6130da8185613079565b93506130ea81856020860161308a565b6130f3816130b4565b840191505092915050565b6000602082019050818103600083015261311881846130c5565b905092915050565b6000819050919050565b61313381613120565b811461313e57600080fd5b50565b6000813590506131508161312a565b92915050565b60006020828403121561316c5761316b612f50565b5b600061317a84828501613141565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006131ae82613183565b9050919050565b6131be816131a3565b82525050565b60006020820190506131d960008301846131b5565b92915050565b6131e8816131a3565b81146131f357600080fd5b50565b600081359050613205816131df565b92915050565b6000806040838503121561322257613221612f50565b5b6000613230858286016131f6565b925050602061324185828601613141565b9150509250929050565b61325481613120565b82525050565b600060208201905061326f600083018461324b565b92915050565b60008060006060848603121561328e5761328d612f50565b5b600061329c868287016131f6565b93505060206132ad868287016131f6565b92505060406132be86828701613141565b9150509250925092565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61330a826130b4565b810181811067ffffffffffffffff82111715613329576133286132d2565b5b80604052505050565b600061333c612f46565b90506133488282613301565b919050565b600067ffffffffffffffff821115613368576133676132d2565b5b613371826130b4565b9050602081019050919050565b82818337600083830152505050565b60006133a061339b8461334d565b613332565b9050828152602081018484840111156133bc576133bb6132cd565b5b6133c784828561337e565b509392505050565b600082601f8301126133e4576133e36132c8565b5b81356133f484826020860161338d565b91505092915050565b60006020828403121561341357613412612f50565b5b600082013567ffffffffffffffff81111561343157613430612f55565b5b61343d848285016133cf565b91505092915050565b600067ffffffffffffffff821115613461576134606132d2565b5b602082029050602081019050919050565b600080fd5b600061348a61348584613446565b613332565b905080838252602082019050602084028301858111156134ad576134ac613472565b5b835b818110156134d657806134c288826131f6565b8452602084019350506020810190506134af565b5050509392505050565b600082601f8301126134f5576134f46132c8565b5b8135613505848260208601613477565b91505092915050565b60006020828403121561352457613523612f50565b5b600082013567ffffffffffffffff81111561354257613541612f55565b5b61354e848285016134e0565b91505092915050565b60006020828403121561356d5761356c612f50565b5b600061357b848285016131f6565b91505092915050565b6000806040838503121561359b5761359a612f50565b5b60006135a9858286016131f6565b92505060206135ba8582860161302c565b9150509250929050565b600067ffffffffffffffff8211156135df576135de6132d2565b5b6135e8826130b4565b9050602081019050919050565b6000613608613603846135c4565b613332565b905082815260208101848484011115613624576136236132cd565b5b61362f84828561337e565b509392505050565b600082601f83011261364c5761364b6132c8565b5b813561365c8482602086016135f5565b91505092915050565b6000806000806080858703121561367f5761367e612f50565b5b600061368d878288016131f6565b945050602061369e878288016131f6565b93505060406136af87828801613141565b925050606085013567ffffffffffffffff8111156136d0576136cf612f55565b5b6136dc87828801613637565b91505092959194509250565b600080604083850312156136ff576136fe612f50565b5b600061370d858286016131f6565b925050602061371e858286016131f6565b9150509250929050565b6000806040838503121561373f5761373e612f50565b5b600061374d85828601613141565b925050602061375e85828601613141565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806137af57607f821691505b6020821081036137c2576137c1613768565b5b50919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b6000613824602183613079565b915061382f826137c8565b604082019050919050565b6000602082019050818103600083015261385381613817565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60008201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c000000602082015250565b60006138b6603d83613079565b91506138c18261385a565b604082019050919050565b600060208201905081810360008301526138e5816138a9565b9050919050565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560008201527f72206f7220617070726f76656400000000000000000000000000000000000000602082015250565b6000613948602d83613079565b9150613953826138ec565b604082019050919050565b600060208201905081810360008301526139778161393b565b9050919050565b60008151905061398d8161312a565b92915050565b6000602082840312156139a9576139a8612f50565b5b60006139b78482850161397e565b91505092915050565b60006040820190506139d560008301856131b5565b6139e2602083018461324b565b9392505050565b6000815190506139f881613015565b92915050565b600060208284031215613a1457613a13612f50565b5b6000613a22848285016139e9565b91505092915050565b7f596f7520617265206e6f7420746865206f776e6572206f662074686973204e4660008201527f5400000000000000000000000000000000000000000000000000000000000000602082015250565b6000613a87602183613079565b9150613a9282613a2b565b604082019050919050565b60006020820190508181036000830152613ab681613a7a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613af782613120565b915060008203613b0a57613b09613abd565b5b600182039050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302613b777fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82613b3a565b613b818683613b3a565b95508019841693508086168417925050509392505050565b6000819050919050565b6000613bbe613bb9613bb484613120565b613b99565b613120565b9050919050565b6000819050919050565b613bd883613ba3565b613bec613be482613bc5565b848454613b47565b825550505050565b600090565b613c01613bf4565b613c0c818484613bcf565b505050565b5b81811015613c3057613c25600082613bf9565b600181019050613c12565b5050565b601f821115613c7557613c4681613b15565b613c4f84613b2a565b81016020851015613c5e578190505b613c72613c6a85613b2a565b830182613c11565b50505b505050565b600082821c905092915050565b6000613c9860001984600802613c7a565b1980831691505092915050565b6000613cb18383613c87565b9150826002028217905092915050565b613cca8261306e565b67ffffffffffffffff811115613ce357613ce26132d2565b5b613ced8254613797565b613cf8828285613c34565b600060209050601f831160018114613d2b5760008415613d19578287015190505b613d238582613ca5565b865550613d8b565b601f198416613d3986613b15565b60005b82811015613d6157848901518255600182019150602085019450602081019050613d3c565b86831015613d7e5784890151613d7a601f891682613c87565b8355505b6001600288020188555050505b505050505050565b7f4e6f20726563697069656e74732070726f766964656400000000000000000000600082015250565b6000613dc9601683613079565b9150613dd482613d93565b602082019050919050565b60006020820190508181036000830152613df881613dbc565b9050919050565b6000613e0a82613120565b9150613e1583613120565b9250828203905081811115613e2d57613e2c613abd565b5b92915050565b7f4e6f7420656e6f75676820746f6b656e73206c65667400000000000000000000600082015250565b6000613e69601683613079565b9150613e7482613e33565b602082019050919050565b60006020820190508181036000830152613e9881613e5c565b9050919050565b6000613eaa82613120565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613edc57613edb613abd565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4552433732313a20696e76616c696420746f6b656e2049440000000000000000600082015250565b6000613f4c601883613079565b9150613f5782613f16565b602082019050919050565b60006020820190508181036000830152613f7b81613f3f565b9050919050565b7f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b6000613fde602983613079565b9150613fe982613f82565b604082019050919050565b6000602082019050818103600083015261400d81613fd1565b9050919050565b7f5075626c6963206d696e74206973206e6f74206c697665000000000000000000600082015250565b600061404a601783613079565b915061405582614014565b602082019050919050565b600060208201905081810360008301526140798161403d565b9050919050565b600061408b82613120565b915061409683613120565b92508282026140a481613120565b915082820484148315176140bb576140ba613abd565b5b5092915050565b7f496e73756666696369656e742062616c616e6365000000000000000000000000600082015250565b60006140f8601483613079565b9150614103826140c2565b602082019050919050565b60006020820190508181036000830152614127816140eb565b9050919050565b7f596f752063616e206d696e7420757020746f20313020746f6b656e732070657260008201527f207472616e73616374696f6e0000000000000000000000000000000000000000602082015250565b600061418a602c83613079565b91506141958261412e565b604082019050919050565b600060208201905081810360008301526141b98161417d565b9050919050565b7f416c6c20746f6b656e732068617665206265656e206d696e7465640000000000600082015250565b60006141f6601b83613079565b9150614201826141c0565b602082019050919050565b60006020820190508181036000830152614225816141e9565b9050919050565b7f53656e74204554482076616c7565206973206c657373207468616e206d696e7460008201527f696e6720636f7374000000000000000000000000000000000000000000000000602082015250565b6000614288602883613079565b91506142938261422c565b604082019050919050565b600060208201905081810360008301526142b78161427b565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b600061431a602f83613079565b9150614325826142be565b604082019050919050565b600060208201905081810360008301526143498161430d565b9050919050565b600081905092915050565b60006143668261306e565b6143708185614350565b935061438081856020860161308a565b80840191505092915050565b6000815461439981613797565b6143a38186614350565b945060018216600081146143be57600181146143d357614406565b60ff1983168652811515820286019350614406565b6143dc85613b15565b60005b838110156143fe578154818901526001820191506020810190506143df565b838801955050505b50505092915050565b600061441b828661435b565b9150614427828561435b565b9150614433828461438c565b9150819050949350505050565b7f496e76616c6964207374617274546f6b656e4964000000000000000000000000600082015250565b6000614476601483613079565b915061448182614440565b602082019050919050565b600060208201905081810360008301526144a581614469565b9050919050565b7f496e76616c696420656e64546f6b656e49640000000000000000000000000000600082015250565b60006144e2601283613079565b91506144ed826144ac565b602082019050919050565b60006020820190508181036000830152614511816144d5565b9050919050565b7f7374617274546f6b656e4964206d757374206265206c657373207468616e206f60008201527f7220657175616c20746f20656e64546f6b656e49640000000000000000000000602082015250565b6000614574603583613079565b915061457f82614518565b604082019050919050565b600060208201905081810360008301526145a381614567565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614606602683613079565b9150614611826145aa565b604082019050919050565b60006020820190508181036000830152614635816145f9565b9050919050565b7f596f752063616e206d696e7420757020746f203320746f6b656e73207065722060008201527f7472616e73616374696f6e000000000000000000000000000000000000000000602082015250565b6000614698602b83613079565b91506146a38261463c565b604082019050919050565b600060208201905081810360008301526146c78161468b565b9050919050565b60006060820190506146e360008301866131b5565b6146f060208301856131b5565b6146fd604083018461324b565b949350505050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061473b602083613079565b915061474682614705565b602082019050919050565b6000602082019050818103600083015261476a8161472e565b9050919050565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b60006147cd602583613079565b91506147d882614771565b604082019050919050565b600060208201905081810360008301526147fc816147c0565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061485f602483613079565b915061486a82614803565b604082019050919050565b6000602082019050818103600083015261488e81614852565b9050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b60006148cb601f83613079565b91506148d682614895565b602082019050919050565b600060208201905081810360008301526148fa816148be565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b6000614937601983613079565b915061494282614901565b602082019050919050565b600060208201905081810360008301526149668161492a565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b60006149c9603283613079565b91506149d48261496d565b604082019050919050565b600060208201905081810360008301526149f8816149bc565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614a3982613120565b9150614a4483613120565b9250828201905080821115614a5c57614a5b613abd565b5b92915050565b600081519050919050565b600082825260208201905092915050565b6000614a8982614a62565b614a938185614a6d565b9350614aa381856020860161308a565b614aac816130b4565b840191505092915050565b6000608082019050614acc60008301876131b5565b614ad960208301866131b5565b614ae6604083018561324b565b8181036060830152614af88184614a7e565b905095945050505050565b600081519050614b1281612f86565b92915050565b600060208284031215614b2e57614b2d612f50565b5b6000614b3c84828501614b03565b91505092915050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b6000614b7b602083613079565b9150614b8682614b45565b602082019050919050565b60006020820190508181036000830152614baa81614b6e565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000614be7601c83613079565b9150614bf282614bb1565b602082019050919050565b60006020820190508181036000830152614c1681614bda565b905091905056fea2646970667358221220d1f97d76cdd185308e7ef510f601829482720006121f66258468a05e1468496e64736f6c634300081300330000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000076464736861726b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000034444530000000000000000000000000000000000000000000000000000000000