60806040523480156200001157600080fd5b506040516200272d3803806200272d8339818101604052810190620000379190620003ec565b828281600390816200004a919062000537565b5080600490816200005c919062000537565b505050620000937f8d0bf5f8e5baec3cfcec99879fb00890fbf33da45df465d95009558102205a9660001b620001a560201b60201c565b620000c77f1d9924aedd2e56da5d2ce5b3a6d5fb203250ac381e8f7581b30add1523795d3160001b620001a560201b60201c565b620000fb7fa12b5d1c8291c8e3aa80c45a4642e994eede52a0dfb7d469f4646efd9f5c1bd960001b620001a560201b60201c565b6200011f6000801b62000113620001a860201b60201c565b620001b060201b60201c565b620001537fa8e634c325971611918359083f24e152e411ad98fd982c987afda00d8e63b6b360001b620001a560201b60201c565b620001877f518b0e689a5604035ded4983b8c3813500fbe0fd57fa06a6779148e07a8cf7f760001b620001a560201b60201c565b6200019c6000801b82620001b060201b60201c565b50505062000610565b50565b600033905090565b620001c28282620001c660201b60201c565b5050565b620001d88282620002b860201b60201c565b620002b45760016005600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555062000259620001a860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b60006005600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200034b57600080fd5b815160018060401b038082111562000368576200036762000323565b5b601f1960405181603f83601f870116011681019150808210838311171562000395576200039462000323565b5b81604052838152602092508683858801011115620003b257600080fd5b600091505b83821015620003d7578282870101518383830101528282019150620003b7565b60008385830101528094505050505092915050565b6000806000606084860312156200040257600080fd5b835160018060401b03808211156200041957600080fd5b620004278783880162000339565b945060208601519150808211156200043e57600080fd5b506200044d8682870162000339565b925050604084015160018060a01b03811681146200046a57600080fd5b809150509250925092565b60008160011c905060018216806200048e57607f821691505b602082108103620004af57634e487b7160e01b600052602260045260246000fd5b50919050565b806000525060006020600020905090565b601f8211156200051857600081815260208120601f850160051c81016020861015620004f0578190505b601f850160051c820191505b818110156200051457828155600181019050620004fc565b5050505b505050565b60008260011b6000198460031b1c19831617905092915050565b815160018060401b0381111562000553576200055262000323565b5b6200056b8162000564845462000475565b84620004c6565b60006020809150601f831160018114620005a457600084156200058f578387015190505b6200059b85826200051d565b86555062000608565b601f198416620005b486620004b5565b60005b82811015620005dc5785890151825560018201915084860195508481019050620005b7565b5085821015620005fc578488015160001960f88860031b161c1981168255505b505060018460011b0185555b505050505050565b61210d80620006206000396000f3fe608060405234801561001057600080fd5b50600436106101425760003560e01c806342966c68116100b8578063a217fddf1161007c578063a217fddf1461039b578063a457c2d7146103b9578063a9059cbb146103e9578063d539139314610419578063d547741f14610437578063dd62ed3e1461045357610142565b806342966c68146102e557806370a082311461030157806379cc67901461033157806391d148541461034d57806395d89b411461037d57610142565b8063248a9ca31161010a578063248a9ca3146102135780632f2ff15d14610243578063313ce5671461025f57806336568abe1461027d578063395093511461029957806340c10f19146102c957610142565b806301ffc9a71461014757806306fdde0314610177578063095ea7b31461019557806318160ddd146101c557806323b872dd146101e3575b600080fd5b610161600480360381019061015c91906118bf565b610483565b60405161016e91906118f2565b60405180910390f35b61017f6104fd565b60405161018c919061192f565b60405180910390f35b6101af60048036038101906101aa9190611983565b61058f565b6040516101bc91906118f2565b60405180910390f35b6101cd6105b2565b6040516101da91906119af565b60405180910390f35b6101fd60048036038101906101f891906119c0565b6105bc565b60405161020a91906118f2565b60405180910390f35b61022d600480360381019061022891906119fc565b6105eb565b60405161023a9190611a18565b60405180910390f35b61025d60048036038101906102589190611a29565b61060b565b005b61026761062c565b6040516102749190611a55565b60405180910390f35b61029760048036038101906102929190611a29565b610635565b005b6102b360048036038101906102ae9190611983565b6106b8565b6040516102c091906118f2565b60405180910390f35b6102e360048036038101906102de9190611983565b6106ef565b005b6102ff60048036038101906102fa9190611a69565b6108a1565b005b61031b60048036038101906103169190611a85565b6108b5565b60405161032891906119af565b60405180910390f35b61034b60048036038101906103469190611983565b6108fd565b005b61036760048036038101906103629190611a29565b61091d565b60405161037491906118f2565b60405180910390f35b610385610988565b604051610392919061192f565b60405180910390f35b6103a3610a1a565b6040516103b09190611a18565b60405180910390f35b6103d360048036038101906103ce9190611983565b610a21565b6040516103e091906118f2565b60405180910390f35b61040360048036038101906103fe9190611983565b610a98565b60405161041091906118f2565b60405180910390f35b610421610abb565b60405161042e9190611a18565b60405180910390f35b610451600480360381019061044c9190611a29565b610adf565b005b61046d60048036038101906104689190611aa8565b610b00565b60405161047a91906119af565b60405180910390f35b60007f7965db0b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806104f657506104f582610b87565b5b9050919050565b60606003805461050c90611adb565b80601f016020809104026020016040519081016040528092919081815260200182805461053890611adb565b80156105855780601f1061055a57610100808354040283529160200191610585565b820191906000526020600020905b81548152906001019060200180831161056857829003601f168201915b5050505050905090565b60008061059a610bf1565b90506105a7818585610bf9565b600191505092915050565b6000600254905090565b6000806105c7610bf1565b90506105d4858285610dc2565b6105df858585610e4e565b60019150509392505050565b600060056000838152602001908152602001600020600101549050919050565b610614826105eb565b61061d816110cd565b61062783836110e1565b505050565b60006012905090565b61063d610bf1565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146106aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106a190611b19565b60405180910390fd5b6106b482826111c2565b5050565b6000806106c3610bf1565b90506106e48185856106d58589610b00565b6106df9190611b93565b610bf9565b600191505092915050565b61071b7f13fec4db6a4a75a4639d5352acd13e95d056e1612467b77906e50b8fcfbb1acc60001b6112a4565b6107477f8d17f7557e624affa5441d2a6f887299cccc92d2bbf73a0e65dde5616275fbaf60001b6112a4565b6107737f627f4a4295615e0f09e4c97fa8c09e5fc90e2c05bc027f574bf04df453a93c7660001b6112a4565b61079f7ff99d689a95830797d61b671197e37966581e62686a85b8f24fd4653c6a5fe81060001b6112a4565b6107d07f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a66107cb610bf1565b61091d565b61080f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161080690611bb1565b60405180910390fd5b61083b7fe40c22754c646a7c28e7a98d2d6daf4f070e1ff66cc9fdd1447476a6915c3d5560001b6112a4565b6108677f5ac7bdb8980ce49a23627421fc158a2b5eb8ba454d7708540cecb818669ce95760001b6112a4565b6108937fe2932622f17f715f3319cb131c52fb59253f51ac2f0f8975f0815a9602aa12b460001b6112a4565b61089d82826112a7565b5050565b6108b26108ac610bf1565b82611406565b50565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61090f82610909610bf1565b83610dc2565b6109198282611406565b5050565b60006005600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60606004805461099790611adb565b80601f01602080910402602001604051908101604052809291908181526020018280546109c390611adb565b8015610a105780601f106109e557610100808354040283529160200191610a10565b820191906000526020600020905b8154815290600101906020018083116109f357829003601f168201915b5050505050905090565b6000801b81565b600080610a2c610bf1565b90506000610a3a8286610b00565b905083811015610a7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a7690611bef565b60405180910390fd5b610a8c8286868403610bf9565b60019250505092915050565b600080610aa3610bf1565b9050610ab0818585610e4e565b600191505092915050565b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a681565b610ae8826105eb565b610af1816110cd565b610afb83836111c2565b505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610c68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5f90611c53565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610cd7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cce90611cb7565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051610db591906119af565b60405180910390a3505050565b6000610dce8484610b00565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610e485781811015610e3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3190611d1b565b60405180910390fd5b610e478484848403610bf9565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610ebd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb490611d59565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610f2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2390611dbd565b60405180910390fd5b610f378383836115dc565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015610fbd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fb490611e21565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546110509190611b93565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516110b491906119af565b60405180910390a36110c78484846115e1565b50505050565b6110de816110d9610bf1565b6115e6565b50565b6110eb828261091d565b6111be5760016005600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611163610bf1565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b6111cc828261091d565b156112a05760006005600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611245610bf1565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45b5050565b50565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611316576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130d90611e85565b60405180910390fd5b611322600083836115dc565b80600260008282546113349190611b93565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546113899190611b93565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516113ee91906119af565b60405180910390a3611402600083836115e1565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611475576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146c90611ec3565b60405180910390fd5b611481826000836115dc565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611507576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114fe90611f27565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816002600082825461155e9190611f8b565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516115c391906119af565b60405180910390a36115d7836000846115e1565b505050565b505050565b505050565b6115f0828261091d565b61167f576116158173ffffffffffffffffffffffffffffffffffffffff166014611683565b6116238360001c6020611683565b604051602001611634929190611fa9565b6040516020818303038152906040526040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611676919061192f565b60405180910390fd5b5050565b6060600060028360026116969190612030565b6116a09190611b93565b67ffffffffffffffff8111156116b9576116b8612052565b5b6040519080825280601f01601f1916602001820160405280156116eb5781602001600182028036833780820191505090505b5090507f30000000000000000000000000000000000000000000000000000000000000008160008151811061172357611722612068565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f78000000000000000000000000000000000000000000000000000000000000008160018151811061178757611786612068565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600060018460026117c79190612030565b6117d19190611b93565b90505b6001811115611871577f3031323334353637383961626364656600000000000000000000000000000000600f86166010811061181357611812612068565b5b1a60f81b82828151811061182a57611829612068565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600485901c94508061186a9061207e565b90506117d4565b50600084146118b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ac9061209a565b60405180910390fd5b8091505092915050565b6000602082840312156118d157600080fd5b813563ffffffff60e01b811681146118e857600080fd5b8091505092915050565b6000602082019050821515825292915050565b60005b83811015611923578082015181840152602081019050611908565b50600083830152505050565b602081526000825180602084015261194e816040850160208701611905565b6040601f19601f83011684010191505092915050565b60008135905060018060a01b038116811461197e57600080fd5b919050565b6000806040838503121561199657600080fd5b61199f83611964565b9150602083013590509250929050565b600060208201905082825292915050565b6000806000606084860312156119d557600080fd5b6119de84611964565b92506119ec60208501611964565b9150604084013590509250925092565b600060208284031215611a0e57600080fd5b8135905092915050565b600060208201905082825292915050565b60008060408385031215611a3c57600080fd5b82359150611a4c60208401611964565b90509250929050565b600060208201905060ff8316825292915050565b600060208284031215611a7b57600080fd5b8135905092915050565b600060208284031215611a9757600080fd5b611aa082611964565b905092915050565b60008060408385031215611abb57600080fd5b611ac483611964565b9150611ad260208401611964565b90509250929050565b60008160011c90506001821680611af357607f821691505b602082108103611b1357634e487b7160e01b600052602260045260246000fd5b50919050565b60208152602f60208201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560408201527f20726f6c657320666f722073656c66000000000000000000000000000000000060608201526000608082019050919050565b634e487b7160e01b600052601160045260246000fd5b6000828201905080821115611bab57611baa611b7d565b5b92915050565b60208152601360208201527f43616c6c6572206e6f742061206d696e7465720000000000000000000000000060408201526000606082019050919050565b60208152602560208201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760408201527f207a65726f00000000000000000000000000000000000000000000000000000060608201526000608082019050919050565b60208152602460208201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460408201527f726573730000000000000000000000000000000000000000000000000000000060608201526000608082019050919050565b60208152602260208201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560408201527f737300000000000000000000000000000000000000000000000000000000000060608201526000608082019050919050565b60208152601d60208201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060408201526000606082019050919050565b60208152602560208201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460408201527f647265737300000000000000000000000000000000000000000000000000000060608201526000608082019050919050565b60208152602360208201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201527f657373000000000000000000000000000000000000000000000000000000000060608201526000608082019050919050565b60208152602660208201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260408201527f616c616e6365000000000000000000000000000000000000000000000000000060608201526000608082019050919050565b60208152601f60208201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060408201526000606082019050919050565b60208152602160208201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360408201527f730000000000000000000000000000000000000000000000000000000000000060608201526000608082019050919050565b60208152602260208201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60408201527f636500000000000000000000000000000000000000000000000000000000000060608201526000608082019050919050565b6000828203905081811115611fa357611fa2611b7d565b5b92915050565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351611fe1816017850160208801611905565b80830190507f206973206d697373696e6720726f6c65200000000000000000000000000000006017820152835161201f816028840160208801611905565b602881830101925050509392505050565b60008282029050818104831482151761204c5761204b611b7d565b5b92915050565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b60008161208e5761208d611b7d565b5b60001982019050919050565b602081526020808201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746040820152600060608201905091905056fea264697066735822122099d48bad223b86610eb466ada670fef5e3a6df14e5d8397cbe6bd0c10e5c55d264736f6c63430008110033000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000007090711e2883d5b5fb6b26b0d97a0df68dbc1fbb000000000000000000000000000000000000000000000000000000000000000f4661726d656420306e6543697656320000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b784c50306e654369765632000000000000000000000000000000000000000000