60806040523480156200001157600080fd5b506040518060400160405280600c81526020017f41766172696b20546f6b656e00000000000000000000000000000000000000008152506040518060400160405280600481526020017f4156524b0000000000000000000000000000000000000000000000000000000081525081600390816200008f919062000616565b508060049081620000a1919062000616565b505050620000d1620000b8620000d760201b60201c565b6b019d971e4fe8401e74000000620000df60201b60201c565b62000834565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620001545760006040517fec442f050000000000000000000000000000000000000000000000000000000081526004016200014b919062000742565b60405180910390fd5b62000168600083836200016c60201b60201c565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603620001c2578060026000828254620001b591906200078e565b9250508190555062000298565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101562000251578381836040517fe450d38c0000000000000000000000000000000000000000000000000000000081526004016200024893929190620007da565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620002e3578060026000828254039250508190555062000330565b806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516200038f919062000817565b60405180910390a3505050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200041e57607f821691505b602082108103620004345762000433620003d6565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026200049e7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826200045f565b620004aa86836200045f565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620004f7620004f1620004eb84620004c2565b620004cc565b620004c2565b9050919050565b6000819050919050565b6200051383620004d6565b6200052b6200052282620004fe565b8484546200046c565b825550505050565b600090565b6200054262000533565b6200054f81848462000508565b505050565b5b8181101562000577576200056b60008262000538565b60018101905062000555565b5050565b601f821115620005c65762000590816200043a565b6200059b846200044f565b81016020851015620005ab578190505b620005c3620005ba856200044f565b83018262000554565b50505b505050565b600082821c905092915050565b6000620005eb60001984600802620005cb565b1980831691505092915050565b6000620006068383620005d8565b9150826002028217905092915050565b62000621826200039c565b67ffffffffffffffff8111156200063d576200063c620003a7565b5b62000649825462000405565b620006568282856200057b565b600060209050601f8311600181146200068e576000841562000679578287015190505b620006858582620005f8565b865550620006f5565b601f1984166200069e866200043a565b60005b82811015620006c857848901518255600182019150602085019450602081019050620006a1565b86831015620006e85784890151620006e4601f891682620005d8565b8355505b6001600288020188555050505b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200072a82620006fd565b9050919050565b6200073c816200071d565b82525050565b600060208201905062000759600083018462000731565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006200079b82620004c2565b9150620007a883620004c2565b9250828201905080821115620007c357620007c26200075f565b5b92915050565b620007d481620004c2565b82525050565b6000606082019050620007f1600083018662000731565b620008006020830185620007c9565b6200080f6040830184620007c9565b949350505050565b60006020820190506200082e6000830184620007c9565b92915050565b61103d80620008446000396000f3fe608060405234801561001057600080fd5b50600436106100b45760003560e01c806342966c681161007157806342966c681461018f57806370a08231146101ab57806379cc6790146101db57806395d89b41146101f7578063a9059cbb14610215578063dd62ed3e14610245576100b4565b806306fdde03146100b9578063095ea7b3146100d757806318160ddd1461010757806323b872dd14610125578063313ce5671461015557806340c10f1914610173575b600080fd5b6100c1610275565b6040516100ce9190610c64565b60405180910390f35b6100f160048036038101906100ec9190610d1f565b610307565b6040516100fe9190610d7a565b60405180910390f35b61010f61032a565b60405161011c9190610da4565b60405180910390f35b61013f600480360381019061013a9190610dbf565b610334565b60405161014c9190610d7a565b60405180910390f35b61015d610363565b60405161016a9190610e2e565b60405180910390f35b61018d60048036038101906101889190610d1f565b61036c565b005b6101a960048036038101906101a49190610e49565b61037a565b005b6101c560048036038101906101c09190610e76565b61038e565b6040516101d29190610da4565b60405180910390f35b6101f560048036038101906101f09190610d1f565b6103d6565b005b6101ff6103f6565b60405161020c9190610c64565b60405180910390f35b61022f600480360381019061022a9190610d1f565b610488565b60405161023c9190610d7a565b60405180910390f35b61025f600480360381019061025a9190610ea3565b6104ab565b60405161026c9190610da4565b60405180910390f35b60606003805461028490610f12565b80601f01602080910402602001604051908101604052809291908181526020018280546102b090610f12565b80156102fd5780601f106102d2576101008083540402835291602001916102fd565b820191906000526020600020905b8154815290600101906020018083116102e057829003601f168201915b5050505050905090565b600080610312610532565b905061031f81858561053a565b600191505092915050565b6000600254905090565b60008061033f610532565b905061034c85828561054c565b6103578585856105e0565b60019150509392505050565b60006012905090565b61037682826106d4565b5050565b61038b610385610532565b82610756565b50565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6103e8826103e2610532565b8361054c565b6103f28282610756565b5050565b60606004805461040590610f12565b80601f016020809104026020016040519081016040528092919081815260200182805461043190610f12565b801561047e5780601f106104535761010080835404028352916020019161047e565b820191906000526020600020905b81548152906001019060200180831161046157829003601f168201915b5050505050905090565b600080610493610532565b90506104a08185856105e0565b600191505092915050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600033905090565b61054783838360016107d8565b505050565b600061055884846104ab565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146105da57818110156105ca578281836040517ffb8f41b20000000000000000000000000000000000000000000000000000000081526004016105c193929190610f52565b60405180910390fd5b6105d9848484840360006107d8565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036106525760006040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081526004016106499190610f89565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036106c45760006040517fec442f050000000000000000000000000000000000000000000000000000000081526004016106bb9190610f89565b60405180910390fd5b6106cf8383836109af565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036107465760006040517fec442f0500000000000000000000000000000000000000000000000000000000815260040161073d9190610f89565b60405180910390fd5b610752600083836109af565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036107c85760006040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081526004016107bf9190610f89565b60405180910390fd5b6107d4826000836109af565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160361084a5760006040517fe602df050000000000000000000000000000000000000000000000000000000081526004016108419190610f89565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036108bc5760006040517f94280d620000000000000000000000000000000000000000000000000000000081526004016108b39190610f89565b60405180910390fd5b81600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555080156109a9578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516109a09190610da4565b60405180910390a35b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610a015780600260008282546109f59190610fd3565b92505081905550610ad4565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015610a8d578381836040517fe450d38c000000000000000000000000000000000000000000000000000000008152600401610a8493929190610f52565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610b1d5780600260008282540392505081905550610b6a565b806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610bc79190610da4565b60405180910390a3505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015610c0e578082015181840152602081019050610bf3565b60008484015250505050565b6000601f19601f8301169050919050565b6000610c3682610bd4565b610c408185610bdf565b9350610c50818560208601610bf0565b610c5981610c1a565b840191505092915050565b60006020820190508181036000830152610c7e8184610c2b565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610cb682610c8b565b9050919050565b610cc681610cab565b8114610cd157600080fd5b50565b600081359050610ce381610cbd565b92915050565b6000819050919050565b610cfc81610ce9565b8114610d0757600080fd5b50565b600081359050610d1981610cf3565b92915050565b60008060408385031215610d3657610d35610c86565b5b6000610d4485828601610cd4565b9250506020610d5585828601610d0a565b9150509250929050565b60008115159050919050565b610d7481610d5f565b82525050565b6000602082019050610d8f6000830184610d6b565b92915050565b610d9e81610ce9565b82525050565b6000602082019050610db96000830184610d95565b92915050565b600080600060608486031215610dd857610dd7610c86565b5b6000610de686828701610cd4565b9350506020610df786828701610cd4565b9250506040610e0886828701610d0a565b9150509250925092565b600060ff82169050919050565b610e2881610e12565b82525050565b6000602082019050610e436000830184610e1f565b92915050565b600060208284031215610e5f57610e5e610c86565b5b6000610e6d84828501610d0a565b91505092915050565b600060208284031215610e8c57610e8b610c86565b5b6000610e9a84828501610cd4565b91505092915050565b60008060408385031215610eba57610eb9610c86565b5b6000610ec885828601610cd4565b9250506020610ed985828601610cd4565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680610f2a57607f821691505b602082108103610f3d57610f3c610ee3565b5b50919050565b610f4c81610cab565b82525050565b6000606082019050610f676000830186610f43565b610f746020830185610d95565b610f816040830184610d95565b949350505050565b6000602082019050610f9e6000830184610f43565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000610fde82610ce9565b9150610fe983610ce9565b925082820190508082111561100157611000610fa4565b5b9291505056fea2646970667358221220f09fd49a0887eb4352f032f04d83420a1eb193ce9aba614dae675bcef6b7ea6b64736f6c63430008180033