60806040526000600855620000196101f46103e86200016b565b6009553480156200002957600080fd5b506040516200283f3803806200283f8339810160408190526200004c91620001a9565b816040518060400160405280601481526020017f4561737933204561726c792042697264204e4654000000000000000000000000815250604051806040016040528060048152602001632299a2a160e11b8152508160009081620000b191906200032e565b506001620000c082826200032e565b505050620000d481620000f760201b60201c565b50620000e03362000119565b600b620000ee82826200032e565b505050620003fa565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b600780546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b818103818111156200018d57634e487b7160e01b600052601160045260246000fd5b92915050565b634e487b7160e01b600052604160045260246000fd5b60008060408385031215620001bd57600080fd5b82516001600160a01b0381168114620001d557600080fd5b602084810151919350906001600160401b0380821115620001f557600080fd5b818601915086601f8301126200020a57600080fd5b8151818111156200021f576200021f62000193565b604051601f8201601f19908116603f011681019083821181831017156200024a576200024a62000193565b8160405282815289868487010111156200026357600080fd5b600093505b8284101562000287578484018601518185018701529285019262000268565b60008684830101528096505050505050509250929050565b600181811c90821680620002b457607f821691505b602082108103620002d557634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200032957600081815260208120601f850160051c81016020861015620003045750805b601f850160051c820191505b81811015620003255782815560010162000310565b5050505b505050565b81516001600160401b038111156200034a576200034a62000193565b62000362816200035b84546200029f565b84620002db565b602080601f8311600181146200039a5760008415620003815750858301515b600019600386901b1c1916600185901b17855562000325565b600085815260208120601f198616915b82811015620003cb57888601518255948401946001909101908401620003aa565b5085821015620003ea5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b612435806200040a6000396000f3fe608060405234801561001057600080fd5b50600436106101a35760003560e01c806370a08231116100ee578063b88d4fde11610097578063f0292a0311610071578063f0292a031461039d578063f2fde38b146103a6578063f9f2a7ce146103b9578063fce5ec95146103dc57600080fd5b8063b88d4fde1461032e578063c87b56dd14610341578063e985e9c51461035457600080fd5b80638da5cb5b116100c85780638da5cb5b146102f557806395d89b4114610313578063a22cb4651461031b57600080fd5b806370a08231146102c7578063715018a6146102da5780638b87da4b146102e257600080fd5b806332cb6b0c1161015057806346aa52ce1161012a57806346aa52ce1461029857806355f804b3146102a15780636352211e146102b457600080fd5b806332cb6b0c1461025c5780633408a2371461026557806342842e0e1461028557600080fd5b8063081812fc11610181578063081812fc146101fc578063095ea7b31461023457806323b872dd1461024957600080fd5b806301ffc9a7146101a8578063058e2994146101d057806306fdde03146101e7575b600080fd5b6101bb6101b6366004611d07565b6103ef565b60405190151581526020015b60405180910390f35b6101d960095481565b6040519081526020016101c7565b6101ef6104d4565b6040516101c79190611d74565b61020f61020a366004611d87565b610566565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101c7565b610247610242366004611dc9565b61059a565b005b610247610257366004611df3565b610722565b6101d96103e881565b60065461020f9073ffffffffffffffffffffffffffffffffffffffff1681565b610247610293366004611df3565b6107a9565b6101d960085481565b6102476102af366004611ed4565b6107c4565b61020f6102c2366004611d87565b6107dc565b6101d96102d5366004611f1d565b61084e565b610247610902565b6102476102f0366004611f1d565b610916565b60075473ffffffffffffffffffffffffffffffffffffffff1661020f565b6101ef610964565b610247610329366004611f48565b610973565b61024761033c366004611f9b565b61097e565b6101ef61034f366004611d87565b610a0c565b6101bb610362366004612003565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260056020908152604080832093909416825291909152205460ff1690565b6101d96101f481565b6102476103b4366004611f1d565b610a73565b6101bb6103c7366004611f1d565b600a6020526000908152604090205460ff1681565b6102476103ea36600461202d565b610b0d565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f80ac58cd00000000000000000000000000000000000000000000000000000000148061048257507fffffffff0000000000000000000000000000000000000000000000000000000082167f5b5e139f00000000000000000000000000000000000000000000000000000000145b806104ce57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6060600080546104e39061208b565b80601f016020809104026020016040519081016040528092919081815260200182805461050f9061208b565b801561055c5780601f106105315761010080835404028352916020019161055c565b820191906000526020600020905b81548152906001019060200180831161053f57829003601f168201915b5050505050905090565b600061057182610d0d565b5060009081526004602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b60006105a5826107dc565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361064d5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560448201527f720000000000000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff821614806106a1575073ffffffffffffffffffffffffffffffffffffffff8116600090815260056020908152604080832033845290915290205460ff165b6107135760405162461bcd60e51b815260206004820152603e60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c00006064820152608401610644565b61071d8383610d7e565b505050565b61072c3382610e1e565b61079e5760405162461bcd60e51b815260206004820152602e60248201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560448201527f72206e6f7220617070726f7665640000000000000000000000000000000000006064820152608401610644565b61071d838383610ede565b61071d8383836040518060200160405280600081525061097e565b6107cc611111565b600b6107d8828261212c565b5050565b60008181526002602052604081205473ffffffffffffffffffffffffffffffffffffffff16806104ce5760405162461bcd60e51b815260206004820152601860248201527f4552433732313a20696e76616c696420746f6b656e20494400000000000000006044820152606401610644565b600073ffffffffffffffffffffffffffffffffffffffff82166108d95760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f74206120766160448201527f6c6964206f776e657200000000000000000000000000000000000000000000006064820152608401610644565b5073ffffffffffffffffffffffffffffffffffffffff1660009081526003602052604090205490565b61090a611111565b6109146000611178565b565b61091e611111565b600680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff831617905550565b50565b6060600180546104e39061208b565b6107d83383836111ef565b6109883383610e1e565b6109fa5760405162461bcd60e51b815260206004820152602e60248201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560448201527f72206e6f7220617070726f7665640000000000000000000000000000000000006064820152608401610644565b610a0684848484611302565b50505050565b6060610a1782610d0d565b6000610a2161138b565b90506000815111610a415760405180602001604052806000815250610a6c565b80610a4b8461139a565b604051602001610a5c929190612228565b6040516020818303038152906040525b9392505050565b610a7b611111565b73ffffffffffffffffffffffffffffffffffffffff8116610b045760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610644565b61096181611178565b73ffffffffffffffffffffffffffffffffffffffff83166000908152600a602052604090205460ff1615610b835760405162461bcd60e51b815260206004820152600e60248201527f616c7265616479206d696e7465640000000000000000000000000000000000006044820152606401610644565b73ffffffffffffffffffffffffffffffffffffffff83166000908152600a6020908152604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905551610c0691869186910173ffffffffffffffffffffffffffffffffffffffff9290921682521515602082015260400190565b604051602081830303815290604052805190602001209050610c2881836114cf565b60008315610c9857506009546103e88110610c855760405162461bcd60e51b815260206004820152601360248201527f6d617820726573657276652072656163686564000000000000000000000000006044820152606401610644565b610c90816001612286565b600955610cfc565b506008546101f48110610ced5760405162461bcd60e51b815260206004820152601060248201527f6d6178206d696e742072656163686564000000000000000000000000000000006044820152606401610644565b610cf8816001612286565b6008555b610d06858261159e565b5050505050565b60008181526002602052604090205473ffffffffffffffffffffffffffffffffffffffff166109615760405162461bcd60e51b815260206004820152601860248201527f4552433732313a20696e76616c696420746f6b656e20494400000000000000006044820152606401610644565b600081815260046020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84169081179091558190610dd8826107dc565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600080610e2a836107dc565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480610e98575073ffffffffffffffffffffffffffffffffffffffff80821660009081526005602090815260408083209388168352929052205460ff165b80610ed657508373ffffffffffffffffffffffffffffffffffffffff16610ebe84610566565b73ffffffffffffffffffffffffffffffffffffffff16145b949350505050565b8273ffffffffffffffffffffffffffffffffffffffff16610efe826107dc565b73ffffffffffffffffffffffffffffffffffffffff1614610f875760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201527f6f776e65720000000000000000000000000000000000000000000000000000006064820152608401610644565b73ffffffffffffffffffffffffffffffffffffffff821661100f5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610644565b61101a600082610d7e565b73ffffffffffffffffffffffffffffffffffffffff83166000908152600360205260408120805460019290611050908490612299565b909155505073ffffffffffffffffffffffffffffffffffffffff8216600090815260036020526040812080546001929061108b908490612286565b909155505060008181526002602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff86811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b60075473ffffffffffffffffffffffffffffffffffffffff1633146109145760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610644565b6007805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361126a5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610644565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526005602090815260408083209487168084529482529182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b61130d848484610ede565b611319848484846115b8565b610a065760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e74657200000000000000000000000000006064820152608401610644565b6060600b80546104e39061208b565b6060816000036113dd57505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b811561140757806113f1816122ac565b91506114009050600a83612313565b91506113e1565b60008167ffffffffffffffff81111561142257611422611e2f565b6040519080825280601f01601f19166020018201604052801561144c576020820181803683370190505b5090505b8415610ed657611461600183612299565b915061146e600a86612327565b611479906030612286565b60f81b81838151811061148e5761148e61233b565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506114c8600a86612313565b9450611450565b600061153161152b846040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101829052600090605c01604051602081830303815290604052805190602001209050919050565b83611773565b60065490915073ffffffffffffffffffffffffffffffffffffffff80831691161461071d5760405162461bcd60e51b815260206004820152601160248201527f696e76616c6964207369676e61747572650000000000000000000000000000006044820152606401610644565b6107d8828260405180602001604052806000815250611797565b600073ffffffffffffffffffffffffffffffffffffffff84163b15611768576040517f150b7a0200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85169063150b7a029061162f90339089908890889060040161236a565b6020604051808303816000875af192505050801561166a575060408051601f3d908101601f19168201909252611667918101906123b3565b60015b61171d573d808015611698576040519150601f19603f3d011682016040523d82523d6000602084013e61169d565b606091505b5080516000036117155760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e74657200000000000000000000000000006064820152608401610644565b805181602001fd5b7fffffffff00000000000000000000000000000000000000000000000000000000167f150b7a0200000000000000000000000000000000000000000000000000000000149050610ed6565b506001949350505050565b60008060006117828585611820565b9150915061178f81611865565b509392505050565b6117a18383611a51565b6117ae60008484846115b8565b61071d5760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e74657200000000000000000000000000006064820152608401610644565b60008082516041036118565760208301516040840151606085015160001a61184a87828585611bdf565b9450945050505061185e565b506000905060025b9250929050565b6000816004811115611879576118796123d0565b036118815750565b6001816004811115611895576118956123d0565b036118e25760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610644565b60028160048111156118f6576118f66123d0565b036119435760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610644565b6003816004811115611957576119576123d0565b036119ca5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c60448201527f75650000000000000000000000000000000000000000000000000000000000006064820152608401610644565b60048160048111156119de576119de6123d0565b036109615760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c60448201527f75650000000000000000000000000000000000000000000000000000000000006064820152608401610644565b73ffffffffffffffffffffffffffffffffffffffff8216611ab45760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610644565b60008181526002602052604090205473ffffffffffffffffffffffffffffffffffffffff1615611b265760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610644565b73ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260408120805460019290611b5c908490612286565b909155505060008181526002602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115611c165750600090506003611cd0565b8460ff16601b14158015611c2e57508460ff16601c14155b15611c3f5750600090506004611cd0565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015611c93573d6000803e3d6000fd5b5050604051601f19015191505073ffffffffffffffffffffffffffffffffffffffff8116611cc957600060019250925050611cd0565b9150600090505b94509492505050565b7fffffffff000000000000000000000000000000000000000000000000000000008116811461096157600080fd5b600060208284031215611d1957600080fd5b8135610a6c81611cd9565b60005b83811015611d3f578181015183820152602001611d27565b50506000910152565b60008151808452611d60816020860160208601611d24565b601f01601f19169290920160200192915050565b602081526000610a6c6020830184611d48565b600060208284031215611d9957600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff81168114611dc457600080fd5b919050565b60008060408385031215611ddc57600080fd5b611de583611da0565b946020939093013593505050565b600080600060608486031215611e0857600080fd5b611e1184611da0565b9250611e1f60208501611da0565b9150604084013590509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600067ffffffffffffffff80841115611e7957611e79611e2f565b604051601f8501601f19908116603f01168101908282118183101715611ea157611ea1611e2f565b81604052809350858152868686011115611eba57600080fd5b858560208301376000602087830101525050509392505050565b600060208284031215611ee657600080fd5b813567ffffffffffffffff811115611efd57600080fd5b8201601f81018413611f0e57600080fd5b610ed684823560208401611e5e565b600060208284031215611f2f57600080fd5b610a6c82611da0565b80358015158114611dc457600080fd5b60008060408385031215611f5b57600080fd5b611f6483611da0565b9150611f7260208401611f38565b90509250929050565b600082601f830112611f8c57600080fd5b610a6c83833560208501611e5e565b60008060008060808587031215611fb157600080fd5b611fba85611da0565b9350611fc860208601611da0565b925060408501359150606085013567ffffffffffffffff811115611feb57600080fd5b611ff787828801611f7b565b91505092959194509250565b6000806040838503121561201657600080fd5b61201f83611da0565b9150611f7260208401611da0565b60008060006060848603121561204257600080fd5b61204b84611da0565b925061205960208501611f38565b9150604084013567ffffffffffffffff81111561207557600080fd5b61208186828701611f7b565b9150509250925092565b600181811c9082168061209f57607f821691505b6020821081036120d8577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b601f82111561071d57600081815260208120601f850160051c810160208610156121055750805b601f850160051c820191505b8181101561212457828155600101612111565b505050505050565b815167ffffffffffffffff81111561214657612146611e2f565b61215a81612154845461208b565b846120de565b602080601f8311600181146121ad57600084156121775750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555612124565b600085815260208120601f198616915b828110156121dc578886015182559484019460019091019084016121bd565b508582101561221857878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b6000835161223a818460208801611d24565b83519083019061224e818360208801611d24565b01949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b808201808211156104ce576104ce612257565b818103818111156104ce576104ce612257565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036122dd576122dd612257565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082612322576123226122e4565b500490565b600082612336576123366122e4565b500690565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600073ffffffffffffffffffffffffffffffffffffffff8087168352808616602084015250836040830152608060608301526123a96080830184611d48565b9695505050505050565b6000602082840312156123c557600080fd5b8151610a6c81611cd9565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea2646970667358221220ee7a3cebd1cfd7b3055aded12f278f82b4b43c684c3bd344c3998b0475a65ebf64736f6c63430008130033000000000000000000000000423e3e1de6dcdafdae15b4bb13b32db7dd671dec0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000003868747470733a2f2f6170692e65617379332e6170703a31353030312f6170692f66726f6e74656e642f6561726c7942697264746f6b656e2f0000000000000000